/**
 * 权限验证工具函数
 */

/**
 * 检查用户是否有指定权限
 * @param {string|Array} requiredPermissions - 需要的权限（单个权限字符串或权限数组）
 * @param {Array} userPermissions - 用户拥有的权限数组
 * @returns {boolean} 是否有权限
 */
export const hasPermission = (requiredPermissions, userPermissions = []) => {
  // 如果用户权限数组为空，说明没有权限
  if (!userPermissions || userPermissions.length === 0) {
    return false
  }
  
  // 如果不需要特殊权限（只需要登录），返回true
  if (!requiredPermissions || requiredPermissions === 'login') {
    return true
  }
  
  // 将单个权限转换为数组统一处理
  const required = Array.isArray(requiredPermissions) ? requiredPermissions : [requiredPermissions]
  
  // 检查用户是否拥有所需权限中的任意一个
  return required.some(permission => {
    // 检查是否有超级管理员权限
    if (userPermissions.includes('SUPER_ADMIN') || userPermissions.includes('ALL')) {
      return true
    }
    
    // 精确匹配权限
    if (userPermissions.includes(permission)) {
      return true
    }
    
    // 检查模块级权限（如 SYSTEM_* 包含了所有系统管理权限）
    if (permission.startsWith('SYSTEM_') && userPermissions.includes('SYSTEM_ADMIN')) {
      return true
    }
    
    return false
  })
}

/**
 * 获取用户信息
 * @returns {Object|null} 用户信息对象
 */
export const getUserInfo = () => {
  try {
    const userInfo = localStorage.getItem('userInfo')
    return userInfo ? JSON.parse(userInfo) : null
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return null
  }
}

/**
 * 获取用户权限列表
 * @returns {Array} 用户权限数组
 */
export const getUserPermissions = () => {
  const userInfo = getUserInfo()
  return userInfo?.permissions || []
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isLoggedIn = () => {
  const token = localStorage.getItem('token')
  return !!token
}

/**
 * 检查路由访问权限
 * @param {Object} routeMeta - 路由meta信息
 * @returns {Object} 权限检查结果
 */
export const checkRoutePermission = (routeMeta) => {
  const { access, permission } = routeMeta
  
  // 检查登录状态
  const isLogin = isLoggedIn()
  const userPermissions = getUserPermissions()
  
  // 白名单页面，直接允许访问
  if (access === 'white') {
    return { allowed: true, reason: '白名单页面' }
  }
  
  // 未登录状态
  if (!isLogin) {
    return { allowed: false, reason: '未登录', redirect: '/login' }
  }
  
  // 只需要登录的页面
  if (access === 'login' && !permission) {
    return { allowed: true, reason: '已登录' }
  }
  
  // 需要特定权限的页面
  if (access === 'permission' && permission) {
    const hasAuth = hasPermission(permission, userPermissions)
    if (hasAuth) {
      return { allowed: true, reason: '有权限访问' }
    } else {
      return { 
        allowed: false, 
        reason: '权限不足', 
        redirect: '/permission',
        query: { permission }
      }
    }
  }
  
  // 默认允许访问
  return { allowed: true, reason: '默认允许' }
}

/**
 * 清除用户登录信息
 */
export const clearUserAuth = () => {
  localStorage.removeItem('token')
  localStorage.removeItem('userInfo')
}

/**
 * 设置用户权限信息（用于动态权限更新）
 * @param {Object} userInfo - 用户信息
 * @param {Array} permissions - 权限列表
 */
export const setUserPermissions = (userInfo, permissions = []) => {
  try {
    localStorage.setItem('userInfo', JSON.stringify({
      ...userInfo,
      permissions
    }))
  } catch (error) {
    console.error('设置用户权限失败:', error)
  }
}